package dp2.tablet.proyecto.gestores;

import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.ExecutionException;

import org.json.JSONArray;
import org.json.JSONException;

import dp2.tablet.proyecto.bean.ServicioBean;

import dp2.tablet.proyecto.bean.HorarioBean;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import dp2.tablet.proyecto.bean.EventoBean;
import dp2.tablet.proyecto.util.JSONReader;
import dp2.tablet.proyecto.util.JSONReaderListener;

public class GestorEvento {
	
	private static final GestorEvento gestor = new GestorEvento();
	
	public static GestorEvento getInstance(){
		return gestor;
	}
	
	public List<EventoBean> dameEventos(Context context){
		JSONArray jEvento;
		try {
			JSONReader reader = new JSONReader();
			reader.setJSONReaderListener((JSONReaderListener)context);
			jEvento=(reader.execute("http://200.16.7.112:3000/event_management/events/dameTodosLosEventos/events.json")).get();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
			return null;
		} catch (ExecutionException e1) {
			e1.printStackTrace();
			return null;
		}

		List<EventoBean> lstTipo= new ArrayList<EventoBean>();
		try{
			for(int i=0;i < jEvento.length();i++){
			
				EventoBean objEvento = new EventoBean();
				objEvento.setIdEvento(jEvento.getJSONObject(i).getInt("event_id"));
				objEvento.setTipo(9);
				objEvento.setStrNombre(jEvento.getJSONObject(i).getString("nombre"));
							
				String fInicio = jEvento.getJSONObject(i).get("fecha_inicio").toString();
				String fFin = jEvento.getJSONObject(i).get("fecha_fin").toString();		
				
				SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
				Date dateIni = formatter.parse(fInicio);
				Date dateFin = formatter.parse(fFin);
				
				formatter = new SimpleDateFormat("dd 'de' MMMM", new Locale("es_ES"));
				
				if (dateIni.equals(dateFin)){
					objEvento.setFechaEvento(formatter.format(dateIni));
				}else{
					objEvento.setFechaEvento("Del " + formatter.format(dateIni) + " al " +formatter.format(dateFin));
				}
				objEvento.setLugarEvento(jEvento.getJSONObject(i).getString("ambiente_nombre"));
				
				
				
				objEvento.setUrlImagen("http://" +jEvento.getJSONObject(i).getString("imagen_publicitaria"));

				lstTipo.add(objEvento);
				
			}	
			return lstTipo;
		}catch(JSONException e){
			Log.e("log_tag", "Error parsing data "+e.toString());
			return null;
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public List<EventoBean> dameEventosSearch(String parametro,Context context){
		JSONArray jEvento;
		try {
			JSONReader reader = new JSONReader();
			reader.setJSONReaderListener((JSONReaderListener)context);
			jEvento=(reader.execute("http://200.16.7.112:3000/event_management/events/buscarEventos/"+ parametro.replace(" ", "%20") +".json")).get();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
			return null;
		} catch (ExecutionException e1) {
			e1.printStackTrace();
			return null;
		}

		List<EventoBean> lstTipo= new ArrayList<EventoBean>();
		try{
			if (jEvento == null){
				return null;
			}else{
				for(int i=0;i < jEvento.length();i++){
				
					EventoBean objEvento = new EventoBean();
					objEvento.setIdEvento(jEvento.getJSONObject(i).getInt("event_id"));
					objEvento.setTipo(jEvento.getJSONObject(i).getInt("event_type_id"));
					objEvento.setStrNombre(jEvento.getJSONObject(i).getString("nombre"));
					
					String fInicio = jEvento.getJSONObject(i).get("fecha_inicio").toString();
					String fFin = jEvento.getJSONObject(i).get("fecha_fin").toString();		
					
					SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
					Date dateIni = formatter.parse(fInicio);
					Date dateFin = formatter.parse(fFin);					
					
					//formatter = new SimpleDateFormat("dd MMM yyyy");
					formatter = new SimpleDateFormat("dd 'de' MMMM", new Locale("es_ES"));
					
					objEvento.setFechaEvento("Del " + formatter.format(dateIni) + " al " +formatter.format(dateFin));
					
					objEvento.setLugarEvento(jEvento.getJSONObject(i).getString("ambiente_nombre"));

					objEvento.setUrlImagen("http://" +jEvento.getJSONObject(i).getString("imagen_publicitaria"));
	
					lstTipo.add(objEvento);
					
				}	
				return lstTipo;
			}
		}catch(JSONException e){
			Log.e("log_tag", "Error parsing data "+e.toString());
			return null;
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	
	public EventoBean dameDetalleEvento(int idEvento,Context context){
		JSONArray jEvento;

		
		try {
			JSONReader reader = new JSONReader();
			reader.setJSONReaderListener((JSONReaderListener)context);
			jEvento=(reader.execute("http://200.16.7.112:3000/event_management/events/dameDetalleEvento/"+ String.valueOf(idEvento) +".json")).get();
			
		} catch (InterruptedException e1) {
			e1.printStackTrace();
			return null;
		} catch (ExecutionException e1) {
			e1.printStackTrace();
			return null;
		}

		try{		
			SimpleDateFormat formatoYMD = new SimpleDateFormat("yyyy-MM-dd"); 
			SimpleDateFormat formatoYMDHMS = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss-05:00");
			
			EventoBean objEvento = new EventoBean();
			objEvento.setIdEvento(idEvento);
			if(jEvento != null){
				String nombre=jEvento.getJSONObject(0).getString("nombre");
				if (nombre == null)
					nombre="Evento sin nombre";
				objEvento.setStrNombre(nombre);
				
				String tipoEvento=jEvento.getJSONObject(0).getString("event_type");
				if(tipoEvento==null)
					tipoEvento="Evento sin tipo";
				objEvento.setStrTipo(tipoEvento);
				
				String descripcion=jEvento.getJSONObject(0).getString("descripcion");
				if(descripcion==null)
					descripcion="Este evento no posee descripción";
				objEvento.setStrDescripcion(descripcion);
				
				String fInicio = jEvento.getJSONObject(0).get("fecha_inicio_venta").toString();
				String fFin = jEvento.getJSONObject(0).get("fecha_fin_venta").toString();		
				
				Date dateIni;
				Date dateFin;
				
				try{
					dateIni = (Date) formatoYMD.parse(fInicio);
					dateFin = (Date) formatoYMD.parse(fFin);
				}catch(Exception ex){
					dateIni=null;
					dateFin=null;
				}

				objEvento.setDteFechaInicioVenta(dateIni);
				objEvento.setDteFechaFinVenta(dateFin);
				
				if((jEvento.getJSONObject(0)).getString("ambiente") == "null"){
					objEvento.setStrAmbiente("null");
					objEvento.setLugarEvento("null");
				}
				else{
					objEvento.setStrAmbiente(((jEvento.getJSONObject(0)).getJSONObject("ambiente")).getString("nombre"));
					objEvento.setLugarEvento(((jEvento.getJSONObject(0)).getJSONObject("ambiente")).getString("direccion"));
				}
				
				String imagen = jEvento.getJSONObject(0).getString("imagen_publicitaria");
				if(imagen==null) objEvento.setUrlImagen(null);
				objEvento.setUrlImagen("http://" + imagen);
			}
			
			ArrayList<HorarioBean> listaHorarios = new ArrayList<HorarioBean>();
			HorarioBean horario;
				
				if((jEvento.getJSONObject(0)).getString("horarios") == "null"){
					objEvento.setHorarios(null);
				}
				else{
				
					String cadFechaEvento;
					String cadHoraInicioEvento;
					String cadHoraFinEvento;
					Date dateFechaEvento;
					Date dateHoraInicioEvento;
					Date dateHoraFinEvento;
					int dia;
					
					JSONArray jarray =((jEvento.getJSONObject(0)).getJSONArray("horarios"));
				
					for(int i=0;i < jarray.length();i++){
						
						horario=new HorarioBean();
						
						cadFechaEvento = jarray.getJSONObject(i).get("fecha").toString();
						cadHoraInicioEvento = jarray.getJSONObject(i).get("hora_inicio").toString();
						cadHoraFinEvento = jarray.getJSONObject(i).get("hora_fin").toString();
						
						try{
							dateFechaEvento = (Date) formatoYMD.parse(cadFechaEvento);
							Log.i("PARSINGA", cadHoraInicioEvento);
							dateHoraInicioEvento = (Date) formatoYMDHMS.parse(cadHoraInicioEvento);
							dateHoraFinEvento = (Date) formatoYMDHMS.parse(cadHoraFinEvento);
							dia=dateFechaEvento.getDay();
						}
						catch(Exception e){
							dateFechaEvento=null;
							dateHoraInicioEvento=null;
							dateHoraFinEvento=null;
							dia=-1;
							e.printStackTrace();
						}
						
						horario.setDteFecha(dateFechaEvento);
						horario.setDteHoraInicio(dateHoraInicioEvento);
						horario.setDteHoraFin(dateHoraFinEvento);
						//horario.setDia(dia);
						
						listaHorarios.add(horario);
					}
					
					objEvento.setHorarios(listaHorarios);
					
				}
			
			if((jEvento.getJSONObject(0)).getString("servicios") == "null"){
				objEvento.setServicios(null);
			}else{
				
				JSONArray jarray =((jEvento.getJSONObject(0)).getJSONArray("servicios"));
				
				ArrayList<ServicioBean> listaServicios = new ArrayList<ServicioBean>();
				ServicioBean servicio;
				String nomServicio;
				
				for(int i=0;i < jarray.length();i++){
					servicio=new ServicioBean();
					
					nomServicio=jarray.getJSONObject(i).get("nombre").toString();
					if(nomServicio==null) nomServicio="";
					servicio.setNombre(nomServicio);
					
					listaServicios.add(servicio);
				}
				
				objEvento.setServicios(listaServicios);
			}
			return objEvento;
		}catch(JSONException e){
			Log.e("log_tag", "Error parsing data "+e.toString());
			return null;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Log.e("log_tag","Error GestorDetalleEvento: "+e.toString());
			
			return null;
		}
	}
	
	
	
}
